home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / mail / mh / contrib / jpeek / mhlinks.build < prev    next >
Text File  |  1992-08-08  |  2KB  |  70 lines

  1. #! /bin/sh
  2. # ^^ THIS SHELL NEEDS BUILT-IN echo TO DO LOOP BELOW EFFICIENTLY.
  3. # $Header: /home/jerry/.lib/at_cron/RCS/mhlinks.build,v 1.4 92/08/09 23:32:44 jerry mh_contrib $
  4. ###    mhlinks.build - build database for 'mhlinks' program
  5. ###    Usage: mhlinks.build [output file]
  6. ##
  7. ##    mhlinks.build BUILDS A DATABASE FOR THE mhlinks COMMAND.
  8. ##    THE DATABASE LISTS EACH MESSAGE FILE, SORTED BY I-NUMBER.
  9. ##    THE DEFAULT FILENAME IS <MH-dir>/mhlinks.list; YOU CAN CHANGE
  10. ##    THAT BY GIVING A PATHNAME ON THE COMMAND LINE.
  11. ##
  12. ##    THE FILE IS ACTUALLY COMPRESSED AND HAS A '.Z' AT THE END...
  13. ##    BUT YOU SHOULD *NOT* ADD A .Z TO YOUR NAME.
  14. ##
  15. ##    mhlinks.build ONLY LOOKS INTO THE FOLDERS IN YOUR MH MAIL DIRECTORY.
  16. ##    IT WON'T LOOK INTO ANYTHING BESIDES DIRECTORIES.  THAT'S BECAUSE
  17. ##    THE READ-ONLY FOLDERS OR SYMLINKS MIGHT POINT TO ANOTHER FILESYSTEM,
  18. ##    WHERE THE I-NUMBERS DON'T MAKE SENSE.
  19. #
  20. #    NOTE TO HACKERS: TABSTOPS SET AT 4 IN THIS CODE
  21. #
  22. #    USE AT YOUR OWN RISK.  SEEMS TO WORK, BUT IT'S YOUR RESPONSIBILITY!
  23. #    PLEASE TELL ME ABOUT BUGS AND FIXES: Jerry Peek, jerry@ora.com
  24.  
  25. colrm=/usr/ucb/colrm        # DELETES COLUMNS (YOU CAN ADAPT TO USE cut -c)
  26. compress=/usr/ucb/compress    # COMPRESSES FROM stdin TO stdout
  27. find=/bin/find                # MUST HAVE A -ls OPERATOR
  28. lastinum=                    # INITIALIZE I-NUMBER OF PREVIOUS FILE
  29. mh=/usr/local/mh            # WHERE MH COMMANDS LIVE
  30. mhdir="`$mh/mhpath +`"        # MH MAIL DIRECTORY
  31. sort=/bin/sort
  32.  
  33. outfile=${1-$mhdir/mhlinks.list}.Z
  34. > "$outfile"
  35. if [ ! -w "$outfile" ]
  36. then
  37.     echo "`basename $0`: can't write to output file '$outfile'." 1>&2
  38.     exit 1
  39. fi
  40.  
  41. # GO TO MH DIRECTORY SO FOLDER NAMES WILL BE SAME AS DIRECTORY NAMES.
  42. cd $mhdir || exit 1
  43. # GET LIST OF TOP-LEVEL DIRECTORIES WITH INNER find AND GIVE TO 
  44. # OUTER find LIKE afolder bfolder inbox ETC.  DO THIS TO MAKE
  45. # FILE PATHNAMES NEAT FOR INNER find.  (IS THERE A BETTER WAY?)
  46. $find `$find * -prune -type d -print` -name '[1-9]*' -type f -ls |
  47. # STRIP OUT MIDDLE OF EACH LINE, LEAVE I-NUMBER AND PATHNAME:
  48. $colrm 7 65 |
  49. # SORT ASCII, NOT NUMERIC (DOES IT MATTER?):
  50. $sort |
  51. # BUILD A LINE THAT HAS ONE I-NUMBER AND ALL ITS PATHNAMES:
  52. while read inum path
  53. do
  54.     case "$inum" in
  55.     "$lastinum")
  56.         paths="$paths $path"
  57.         ;;
  58.     *)    # MAKE SURE THAT THERE'S A SPACE AFTER LAST PATHNAME
  59.         # SO THAT ALL PATHS WILL HAVE SPACE AROUND THEM (FOR MATCHING):
  60.         echo "$lastinum $paths "
  61.         lastinum="$inum"
  62.         paths="$path"
  63.         ;;
  64.     esac
  65. done |
  66. # COMPRESS AS THE DATA FLIES BY... TO SAVE SPACE:
  67. $compress > $outfile
  68.  
  69. # NEED TO CHECK FOR ERRORS
  70.